This is a document describing Kara’s initial exploration of the data from Packets 1-3.

These packets included 29 scales or subscales, including the following:

Means by site

First, let’s compare the mean responses to each subscale across the 5 sites. I’ll plot each subscale in a separate mini-plot (denoted in the title of each mini-plot). The x-axis and color denote the site (US, Ghana, Thailand, China, or Vanuatu). Note the the range y-axis varies between mini-plots. The dot shows what the mean response was for that subscale for that site, and the error bars show a 95% confidence interval for that mean.

Joining, by = c("ctry", "packet", "subscale")

Cluster analysis

… of sites

Now let’s try a formal analysis for determining how similar these 5 sites are to each other.

Hierarchical clustering basically works like this: If there are 5 things - A, B, C, D, and E - this analysis will try to group pairs of like things together. E.g., first it might pair A and D together, then it will pretend that there are just 4 things - AD, B, C, and E. Then it might pair B and C together, and then pretend that there are just 3 things - AD, BC, and E. Then it might pair AD and BC together, and then pretend that there are just 2 things: ADBC and E. It will do this until there is just one “thing” left.

So to read this plot, look for the pairings. Sites that are on the same “branch” in this “dendrogram” showed similar patterns of means on the subscales. The closer together they are on that branch, the more similar they were.

… of subscales

Now let’s do the same thing for the subscales: Which subscales “hang together”?

To read this plot, again, look for the pairings. Subscales that are on the same “branch” in this “dendrogram” showed similar patterns of means across the 5 sites. The closer together they are on that branch, the more similar they were.

Look at correlations among subscales by site

Now let’s take a closer look at which subscales seem to “hang together,” by looking at the correlations between scales in their means for each site.

To read this plot, find one scale on the x-axis, and another scale on the y-axis. The value (and color) at that point in the grid shows you the correlation between these two subscale means across the 5 sites. The maximum possible correlation is +1 (red), and the minimum is -1 (blue).

I ordered the scales according to the cluster analysis we just did above, so you can see “patches” of scales that all tended to have similar patterns of means across sites.

Look at correlations among subscales by individuals

We could do the same thing thinking about individual participants instead of sites - but it’s important to keep in mind that most people didn’t fill out all 29 subscales! So we’ll focus on just looking at how the subscales within each packet (Packet 1, 2, or 3) “hang together” for the people who completed that packet.

As above, to read these plots, find one scale on the x-axis, and another scale on the y-axis. The value (and color) at that point in the grid shows you the correlation between these two subscale means across the 5 sites. The maximum possible correlation is +1 (red), and the minimum is -1 (blue). (Note that these scales are being presented in alphabetical order, not by any sort of clustering analysis.)

Packet 1

Setting row names on a tibble is deprecated.

Packet 2

Setting row names on a tibble is deprecated.

Packet 3

Setting row names on a tibble is deprecated.

All packets

Just for fun, here’s a look at the correlations among individual participants’ subscale scores across all scales. Note that some of these pairs of subscales probably have very few observations going into these correlations!! So take this with a grain of salt.

Setting row names on a tibble is deprecated.

LS0tCnRpdGxlOiAnU0MgZGF0YSBlbnRyeTogUGFja2V0cyAxLTMnCnN1YnRpdGxlOiAnS1cgaW5pdGlhbCBleHBsb3JhdGlvbiAodXBkYXRlZCB3aXRoIGRhdGEgZnJvbSAyMDE4LTAxLTMxKScKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CiMgc2V0IHdvcmtpbmcgZGlyZWN0b3IKIyBzZXR3ZCgiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzLyIpCgojIGxvYWQgcGFja2FnZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocm1zKQpsaWJyYXJ5KGdnZGVuZHJvKQoKIyBsb2FkIHF1ZXN0aW9uIGtleSAoaW5jbHVkaW5nIG1hbnVhbCByZXZlcnNlLWNvZGluZykKcXVlc3Rpb25fa2V5IDwtIHJlYWQuY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfcXVlc3Rpb25fa2V5X2J5aGFuZC5jc3YiKQoKIyBsb2FkIGRhdGEKZF93aWRlIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXF1ZXN0aW9uX3dpZGUuY3N2IikKZF93aWRlX3N1YnNjYWxlIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXN1YnNjYWxlX3dpZGUuY3N2IikKZF9sb25nIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXF1ZXN0aW9uX2xvbmcuY3N2IikKZF9sb25nX3N1YnNjYWxlIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXN1YnNjYWxlX2xvbmcuY3N2IikKCiMgbWFrZSBjdXN0b20gZnVuY3Rpb25zCnJvdW5kMiA8LSBmdW5jdGlvbih4KSB7Zm9ybWF0KHJvdW5kKHgsIDIpLCBkaWdpdHMgPSAyKX0KYGBgCgpUaGlzIGlzIGEgZG9jdW1lbnQgZGVzY3JpYmluZyBLYXJhJ3MgaW5pdGlhbCBleHBsb3JhdGlvbiBvZiB0aGUgZGF0YSBmcm9tIFBhY2tldHMgMS0zLiAKClRoZXNlIHBhY2tldHMgaW5jbHVkZWQgYHIgbGVuZ3RoKGxldmVscyhmYWN0b3IoZF9sb25nX3N1YnNjYWxlJHN1YnNjYWxlKSkpIC0gMWAgc2NhbGVzIG9yIHN1YnNjYWxlcywgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmc6CgotICoqQWJzb3JwdGlvbioqIChUZWxsZWdlbik7IHJhbmdlOiAwIHRvIDM0Ci0gKipBYnNvcnB0aW9uIGV4dHJhKiogKGEgaGFuZGZ1bCBvZiBleHRyYSBxdWVzdGlvbnMgZXh0cmEgcXVlc3Rpb25zKTsgcmFuZ2U6IDAgdG8gNAotICoqRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICMxLTQqKiAoVW5kZXJ3b29kICYgVGVyZXNpKTsgcmFuZ2U6IDAgdG8gMjAKLSAqKkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAjNS0xNCoqIChVbmRlcndvb2QgJiBUZXJlc2kpOyByYW5nZTogMCB0byA1MAotICoqRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICM1LTE0IChUaGFpKSoqIChhZGRpdGlvbmFsIHF1ZXN0aW9ucyBhc2tlZCBvbmx5IGluIFRoYWlsYW5kKTsgcmFuZ2U6IDAgdG8gNjAKLSAqKkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTUtMTYqKiAoVW5kZXJ3b29kICYgVGVyZXNpKTsgcmFuZ2U6IDAgdG8gMTAKLSAqKkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTUtMTYgKFRoYWkpKiogKGFkZGl0aW9uYWwgcXVlc3Rpb25zIGFza2VkIG9ubHkgaW4gVGhhaWxhbmQpOyByYW5nZTogMCB0byAzMAotICoqU3Bpcml0dWFsIGV2ZW50cyoqIChMdWhybWFubik7IHJhbmdlOiAwIHRvIDg4Ci0gKipTZW5zb3J5IHNlZWtpbmcqKiAoQnJvd24gZXQgYWwuKTsgcmFuZ2U6IC0yOCB0byAyOAotICoqQm9keSBhd2FyZW5lc3MqKiAoU2hpZWxkcyBldCBhbC4pOyByYW5nZTogLTM2IHRvIDM2Ci0gKipBdHRlbnRpb24gdG8gZmVlbGluZ3MqKiAoU2Fsb3ZleSBldCBhbC4pOyByYW5nZTogLTQyIHRvIDQyCi0gKipIYWxsdWNpbmF0aW9uKiogKEFsZGVyc29uLURheSk7IHJhbmdlOiAwIHRvIDI3Ci0gKipWSVNROiBkaWFsb2dpYyBzcGVlY2gqKiAoTWNDYXJ0aHktSm9uZXMgJiBGZXJueWhvdWdoKTsgcmFuZ2U6IC04IHRvIDgKLSAqKlZJU1E6IGlubmVyIHNwZWVjaCoqIChNY0NhcnRoeS1Kb25lcyAmIEZlcm55aG91Z2gpOyByYW5nZTogLTEwIHRvIDEwCi0gKipWSVNROiBldmFsdWF0aXZlL21vdGl2YXRpb25hbCBzcGVlY2gqKiAoTWNDYXJ0aHktSm9uZXMgJiBGZXJueWhvdWdoKTsgcmFuZ2U6IC04IHRvIDgKLSAqKklubmVyIHNwZWVjaCoqIChIYXJkeS9CZW50YWxsKTsgcmFuZ2U6IC0yMCB0byAyMAotICoqSGVhcmluZyBldmVudHMqKiAoUG9zZXkgJiBMb3NjaCk7IHJhbmdlOiAwIHRvIDE4Ci0gKipFbmNvZGluZyBzdHlsZSoqIChMZXdpY2tpKTsgcmFuZ2U6IDAgdG8gNDAKLSAqKk1pbmQgbWV0YXBob3JzKiogKFZhbiBFbGspOyByYW5nZTogLTE2IHRvIDE2Ci0gKipUQVQ6IGxhY2sgb2YgY29nbml0aXZlIGNvbmZpZGVuY2UqKiAoV2VsbHMgZXQgYWwuKTsgcmFuZ2U6IC0xMiB0byAxMgotICoqVEFUOiBwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyoqIChXZWxscyBldCBhbC4pOyByYW5nZTogLTEyIHRvIDEyCi0gKipUQVQ6IGNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MqKiAoV2VsbHMgZXQgYWwuKTsgcmFuZ2U6IC0xMiB0byAxMgotICoqVEFUOiB1bmNvbnRyb2xsYWJpbGl0eS9kYW5nZXIqKiAoV2VsbHMgZXQgYWwuKTsgcmFuZ2U6IC0xMiB0byAxMgotICoqVEFUOiBuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMqKiAoV2VsbHMgZXQgYWwuKTsgcmFuZ2U6IC0xMiB0byAxMgotICoqRHVhbGlzbTogbWVudGFsIHN0YXRlcyoqIChXZWlzbWFuKTsgcmFuZ2U6IDAgdG8gOAotICoqRHVhbGlzbTogbGlmZSBldmVudHMqKiAoV2Vpc21hbik7IHJhbmdlOiAwIHRvIDUKLSAqKkR1YWxpc206IGluYW5pbWF0ZSBjb25zY2lvdXNuZXNzKiogKFdlaXNtYW4pOyByYW5nZTogMCB0byA2Ci0gKipEdWFsaXNtOiBtaW5kcywgc2VsdmVzLCAmIHdvcmxkKiogKFdlaXNtYW4pOyByYW5nZTogMCB0byA5Ci0gKipEdWFsaXNtOiBlcGlzdGVtb2xvZ3kqKiAoV2Vpc21hbik7IHJhbmdlOiAwIHRvIDUKCiMgTWVhbnMgYnkgc2l0ZQoKRmlyc3QsIGxldCdzIGNvbXBhcmUgdGhlIG1lYW4gcmVzcG9uc2VzIHRvIGVhY2ggc3Vic2NhbGUgYWNyb3NzIHRoZSA1IHNpdGVzLiBJJ2xsIHBsb3QgZWFjaCBzdWJzY2FsZSBpbiBhIHNlcGFyYXRlIG1pbmktcGxvdCAoZGVub3RlZCBpbiB0aGUgdGl0bGUgb2YgZWFjaCBtaW5pLXBsb3QpLiBUaGUgeC1heGlzIGFuZCBjb2xvciBkZW5vdGUgdGhlIHNpdGUgKFVTLCBHaGFuYSwgVGhhaWxhbmQsIENoaW5hLCBvciBWYW51YXR1KS4gTm90ZSB0aGUgdGhlIHJhbmdlIHktYXhpcyB2YXJpZXMgYmV0d2VlbiBtaW5pLXBsb3RzLiBUaGUgZG90IHNob3dzIHdoYXQgdGhlIG1lYW4gcmVzcG9uc2Ugd2FzIGZvciB0aGF0IHN1YnNjYWxlIGZvciB0aGF0IHNpdGUsIGFuZCB0aGUgZXJyb3IgYmFycyBzaG93IGEgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoYXQgbWVhbi4gCgpgYGB7cn0KZF9sb25nX3N1YnNjYWxlX2Jvb3QgPC0gZF9sb25nX3N1YnNjYWxlICU+JQogIGZpbHRlcighaXMubmEoc3VtX3Njb3JlKSkgJT4lCiAgZ3JvdXBfYnkoY3RyeSwgcGFja2V0LCBzdWJzY2FsZSkgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kc3VtX3Njb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKHN1YnNjYWxlICE9ICJhdHRuIikgJT4lCiAgbGVmdF9qb2luKGRfbG9uZ19zdWJzY2FsZSAlPiUKICAgICAgICAgICAgICBmaWx0ZXIoIWlzLm5hKHN1bV9zY29yZSkpICU+JQogICAgICAgICAgICAgIGNvdW50KGN0cnksIHBhY2tldCwgc3Vic2NhbGUpKSAlPiUKICBtdXRhdGUocGFja2V0ID0gcGFzdGUoInBhY2tldCIsIHBhY2tldCksCiAgICAgICAgIGN0cnkgPSBmYWN0b3IoY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYWlsYW5kIiwgImNoaW5hIiwgInZhbnVhdHUiKSksCiAgICAgICAgIHN1YnNjYWxlID0gCiAgICAgICAgICAgZmFjdG9yKHN1YnNjYWxlLAogICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJleHdsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4d2xfZXh0cmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2VfMXRvNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2VfNXRvMTQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlXzV0bzE0X3RoYWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2VfMTV0bzE2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZV8xNXRvMTZfdGhhaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZXYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX3NlbnNvcnlfc2Vla2luZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5fYm9keV9hd2FyZW5lc3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX3RyYWl0X21ldGFtb29kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVyMl9oYWxsdWNpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2RpYWxvZ2ljX3NwZWVjaCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvX1ZJU1FfaW5uZXJfc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2V2YWxfbW90aXZfaW5uZXJfc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19oYXJkeV9iZW50YWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVyX3Bvc2V5X2xvc2NoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb19sZXdpY2tpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YV92YW5fZWxrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfcG9zaXRpdmVfYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb2duaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19tZW50YWxfc3RhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19saWZlX2V2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfaW5hbmltYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19zZWx2ZXNfc291bHNfd29ybGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X2VwaXN0ZW1pYyIpLAogICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJhYnNvcnB0aW9uICh0ZWxsZWdlbikiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzb3JwdGlvbiAoZXh0cmEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMS00KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAoIzUtMTQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjNS0xNCB0aGFpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAoIzE1LTE2KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAoIzE1LTE2IHRoYWkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zb3J5IHNlZWtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IGF3YXJlbmVzcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRlbnRpb24gdG8gZmVlbGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYWxsdWNpbmF0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGRpYWxvZ2ljIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGV2YWx1YXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lciBzcGVlY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFyaW5nIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nIHN0eWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluZCBtZXRhcGhvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQVQ6IGxhY2sgb2YgY29nbml0aXZlIGNvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQVQ6IHBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEFUOiBjb2duaXRpdmUgc2VsZi1jb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEFUOiB1bmNvbnRyb2xsYWJpbGl0eS9kYW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQVQ6IG5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1lbnRhbCBzdGF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBsaWZlIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGluYW5pbWF0ZSBjb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbWluZHMsIHNlbHZlcywgJiB3b3JsZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGVwaXN0ZW1vbG9neSIpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDR9CmdncGxvdChkX2xvbmdfc3Vic2NhbGVfYm9vdCAlPiUKICAgICAgICAgbXV0YXRlKHN1YnNjYWxlID0gCiAgICAgICAgICAgICAgICAgIGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IAogICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJhYnNvcnB0aW9uXG4odGVsbGVnZW4pXG5yYW5nZTogMCB0byAzNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb25cbihleHRyYSlcbnJhbmdlOiAwIHRvIDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXNcbih1bmRlcndvb2QgJiB0ZXJlc2k7ICMxLTQpXG5yYW5nZTogMCB0byAyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlc1xuKHVuZGVyd29vZCAmIHRlcmVzaTsgIzUtMTQpXG5yYW5nZTogMCB0byA1MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlc1xuKGFkZCdsIHRoYWkgdmVyc2lvbnMgZm9yICM1LTE0KVxucmFuZ2U6IDAgdG8gNjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXNcbih1bmRlcndvb2QgJiB0ZXJlc2k7ICMxNS0xNilcbnJhbmdlOiAwIHRvIDEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzXG4oYWRkJ2wgdGhhaSB2ZXJzaW9ucyBmb3IgIzE1LTE2KVxucmFuZ2U6IDAgdG8gMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlyaXR1YWwgZXZlbnRzXG4obHVocm1hbm4pXG5yYW5nZTogMCB0byA4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNvcnkgc2Vla2luZ1xuKGJyb3duIGV0IGFsLilcbnJhbmdlOiAtMjggdG8gMjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IGF3YXJlbmVzc1xuKHNoaWVsZHMgZXQgYWwuKVxucmFuZ2U6IC0zNiB0byAzNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dGVudGlvbiB0byBmZWVsaW5nc1xuKHNhbG92ZXkgZXQgYWwuKVxucmFuZ2U6IC00MiB0byA0MiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbGx1Y2luYXRpb25cbihhbGRlcnNvbi1kYXkpXG5yYW5nZTogMCB0byAyNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGRpYWxvZ2ljIHNwZWVjaFxuKG1jY2FydGh5LWpvbmVzICYgZmVybnlob3VnaClcbnJhbmdlOiAtOCB0byA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogaW5uZXIgc3BlZWNoXG4obWNjYXJ0aHktam9uZXMgJiBmZXJueWhvdWdoKVxucmFuZ2U6IC0xMCB0byAxMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGV2YWx1YXRpdmUvbW90aXZhdGlvbmFsIHNwZWVjaFxuKG1jY2FydGh5LWpvbmVzICYgZmVybnlob3VnaClcbnJhbmdlOiAtOCB0byA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5uZXIgc3BlZWNoXG4oaGFyZHkvYmVudGFsbClcbnJhbmdlOiAtMjAgdG8gMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFyaW5nIGV2ZW50c1xuKHBvc2V5ICYgbG9zY2gpXG5yYW5nZTogMCB0byAxOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nIHN0eWxlXG4obGV3aWNraSlcbnJhbmdlOiAwIHRvIDQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluZCBtZXRhcGhvcnNcbih2YW4gZWxrKVxucmFuZ2U6IC0xNiB0byAxNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRBVDogbGFjayBvZiBjb2duaXRpdmUgY29uZmlkZW5jZVxuKHdlbGxzIGV0IGFsLilcbnJhbmdlOiAtMTIgdG8gMTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQVQ6IHBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nXG4od2VsbHMgZXQgYWwuKVxucmFuZ2U6IC0xMiB0byAxMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRBVDogY29nbml0aXZlIHNlbGYtY29uc2Npb3VzbmVzc1xuKHdlbGxzIGV0IGFsLilcbnJhbmdlOiAtMTIgdG8gMTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQVQ6IHVuY29udHJvbGxhYmlsaXR5L2RhbmdlclxuKHdlbGxzIGV0IGFsLilcbnJhbmdlOiAtMTIgdG8gMTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQVQ6IG5lZWQgdG8gY29udHJvbCB0aG91Z2h0c1xuKHdlbGxzIGV0IGFsLilcbnJhbmdlOiAtMTIgdG8gMTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBtZW50YWwgc3RhdGVzXG4od2Vpc21hbilcbnJhbmdlOiAwIHRvIDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBsaWZlIGV2ZW50c1xuKHdlaXNtYW4pXG5yYW5nZTogMCB0byA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogaW5hbmltYXRlIGNvbnNjaW91c25lc3Ncbih3ZWlzbWFuKVxucmFuZ2U6IDAgdG8gNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1pbmRzLCBzZWx2ZXMsICYgd29ybGRcbih3ZWlzbWFuKVxucmFuZ2U6IDAgdG8gOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGVwaXN0ZW1vbG9neVxuKHdlaXNtYW4pXG5yYW5nZTogMCB0byA1IikpKSAlPiUKICAgICAgICAgIyBmaWx0ZXIoIWdyZXBsKCJ0aGFpIiwgc3Vic2NhbGUpKSAlPiUgIyBnZXQgcmlkIG9mIHRoYWktb25seSBzY2FsZXMKICAgICAgICAgbXV0YXRlKHBhY2tldCA9IGdzdWIoInBhY2tldCAiLCAiUCIsIHBhY2tldCkpLAogICAgICAgYWVzKHggPSBjdHJ5LCB5ID0gTWVhbiwgY29sb3IgPSBjdHJ5KSkgKwogIGZhY2V0X3dyYXAofiByZW9yZGVyKGludGVyYWN0aW9uKHBhY2tldCwgc3Vic2NhbGUsIHNlcCA9ICI6ICIpLAogICAgICAgICAgICAgICAgICAgICAgIGFzLm51bWVyaWMoZmFjdG9yKHBhY2tldCkpKSwKICAgICAgICAgICAgIG5jb2wgPSAzLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoIihuPSIsIG4sICIpIiksIHkgPSBMb3dlciksIAogICAgICAgICAgICBzaXplID0gMiwgbnVkZ2VfeCA9IDAuMTUsIGhqdXN0ID0gMCkgKwogIHNjYWxlX3hfZGlzY3JldGUoZXhwYW5kID0gYygwLCAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnModGl0bGUgPSAibWVhbiBzdWJzY2FsZSBzY29yZXMgYnkgc2l0ZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJvcmRlcmVkIGJ5IHBhY2tldCAoUDEsIFAyLCBQMylcbmVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJzaXRlIiwgY29sb3IgPSAic2l0ZSIsCiAgICAgICB5ID0gIm1lYW4gc3Vic2NhbGUgc2NvcmUgKHJhbmdlIHZhcmllcyBieSBzdWJzY2FsZSkiKQpgYGAKCiMgQ2x1c3RlciBhbmFseXNpcwoKYGBge3J9CmNvcl9ieV9zaXRlIDwtIGRfbG9uZ19zdWJzY2FsZV9ib290ICU+JQogIGZpbHRlcighZ3JlcGwoInRoYWkiLCBzdWJzY2FsZSkpICU+JSAKICBtdXRhdGUoc3Vic2NhbGUgPSBpZmVsc2Uoc3Vic2NhbGUgPT0gImlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlKGFzLmNoYXJhY3RlcihzdWJzY2FsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdWIoInBhY2tldCAiLCAicCIsIHBhY2tldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9ICJfIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihzdWJzY2FsZSkpKSAlPiUKICBkaXN0aW5jdChjdHJ5LCBzdWJzY2FsZSwgTWVhbikgJT4lCiAgZmlsdGVyKHN1YnNjYWxlICE9ICJpbm5lciB2b2ljZSIpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzcHJlYWQoc3Vic2NhbGUsIE1lYW4pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoImN0cnkiKQpgYGAKCiMjIC4uLiBvZiBzaXRlcwoKTm93IGxldCdzIHRyeSBhIGZvcm1hbCBhbmFseXNpcyBmb3IgZGV0ZXJtaW5pbmcgaG93IHNpbWlsYXIgdGhlc2UgNSBzaXRlcyBhcmUgdG8gZWFjaCBvdGhlci4gCgpIaWVyYXJjaGljYWwgY2x1c3RlcmluZyBiYXNpY2FsbHkgd29ya3MgbGlrZSB0aGlzOiBJZiB0aGVyZSBhcmUgNSB0aGluZ3MgLSBBLCBCLCBDLCBELCBhbmQgRSAtIHRoaXMgYW5hbHlzaXMgd2lsbCB0cnkgdG8gZ3JvdXAgcGFpcnMgb2YgbGlrZSB0aGluZ3MgdG9nZXRoZXIuIEUuZy4sIGZpcnN0IGl0IG1pZ2h0IHBhaXIgQSBhbmQgRCB0b2dldGhlciwgdGhlbiBpdCB3aWxsIHByZXRlbmQgdGhhdCB0aGVyZSBhcmUganVzdCA0IHRoaW5ncyAtIEFELCBCLCBDLCBhbmQgRS4gVGhlbiBpdCBtaWdodCBwYWlyIEIgYW5kIEMgdG9nZXRoZXIsIGFuZCB0aGVuIHByZXRlbmQgdGhhdCB0aGVyZSBhcmUganVzdCAzIHRoaW5ncyAtIEFELCBCQywgYW5kIEUuIFRoZW4gaXQgbWlnaHQgcGFpciBBRCBhbmQgQkMgdG9nZXRoZXIsIGFuZCB0aGVuIHByZXRlbmQgdGhhdCB0aGVyZSBhcmUganVzdCAyIHRoaW5nczogQURCQyBhbmQgRS4gSXQgd2lsbCBkbyB0aGlzIHVudGlsIHRoZXJlIGlzIGp1c3Qgb25lICJ0aGluZyIgbGVmdC4KClNvIHRvIHJlYWQgdGhpcyBwbG90LCBsb29rIGZvciB0aGUgcGFpcmluZ3MuIFNpdGVzIHRoYXQgYXJlIG9uIHRoZSBzYW1lICJicmFuY2giIGluIHRoaXMgImRlbmRyb2dyYW0iIHNob3dlZCBzaW1pbGFyIHBhdHRlcm5zIG9mIG1lYW5zIG9uIHRoZSBzdWJzY2FsZXMuIFRoZSBjbG9zZXIgdG9nZXRoZXIgdGhleSBhcmUgb24gdGhhdCBicmFuY2gsIHRoZSBtb3JlIHNpbWlsYXIgdGhleSB3ZXJlLgoKYGBge3IsIGZpZy53aWR0aCA9IDIsIGZpZy5hc3AgPSAwLjZ9CmNsdXN0X3NpdGVzIDwtIGhjbHVzdChkaXN0KGNvcl9ieV9zaXRlKSkKZ2dkZW5kcm9ncmFtKGNsdXN0X3NpdGVzKSArCiAgbGFicyh0aXRsZSA9ICJoaWVyYXJjaGljYWwgY2x1c3RlcmluZyBvZiBzaXRlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJ1c2luZyBtZWFuIHN1YnNjYWxlIHNjb3JlcyBieSBzaXRlIikKYGBgCgojIyAuLi4gb2Ygc3Vic2NhbGVzCgpOb3cgbGV0J3MgZG8gdGhlIHNhbWUgdGhpbmcgZm9yIHRoZSBzdWJzY2FsZXM6IFdoaWNoIHN1YnNjYWxlcyAiaGFuZyB0b2dldGhlciI/IAoKVG8gcmVhZCB0aGlzIHBsb3QsIGFnYWluLCBsb29rIGZvciB0aGUgcGFpcmluZ3MuIFN1YnNjYWxlcyB0aGF0IGFyZSBvbiB0aGUgc2FtZSAiYnJhbmNoIiBpbiB0aGlzICJkZW5kcm9ncmFtIiBzaG93ZWQgc2ltaWxhciBwYXR0ZXJucyBvZiBtZWFucyBhY3Jvc3MgdGhlIDUgc2l0ZXMuIFRoZSBjbG9zZXIgdG9nZXRoZXIgdGhleSBhcmUgb24gdGhhdCBicmFuY2gsIHRoZSBtb3JlIHNpbWlsYXIgdGhleSB3ZXJlLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjZ9CmNsdXN0X3N1YnNjYWxlcyA8LSBoY2x1c3QoZGlzdCh0KGNvcl9ieV9zaXRlKSkpCmdnZGVuZHJvZ3JhbShjbHVzdF9zdWJzY2FsZXMpICsKICBsYWJzKHRpdGxlID0gImhpZXJhcmNoaWNhbCBjbHVzdGVyIG9mIHN1YnNjYWxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJ1c2luZyBtZWFuIHN1YnNjYWxlIHNjb3JlcyBieSBzaXRlIikKYGBgCgojIExvb2sgYXQgY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyBieSBzaXRlCgpOb3cgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoaWNoIHN1YnNjYWxlcyBzZWVtIHRvICJoYW5nIHRvZ2V0aGVyLCIgYnkgbG9va2luZyBhdCB0aGUgY29ycmVsYXRpb25zIGJldHdlZW4gc2NhbGVzIGluIHRoZWlyIG1lYW5zIGZvciBlYWNoIHNpdGUuIAoKVG8gcmVhZCB0aGlzIHBsb3QsIGZpbmQgb25lIHNjYWxlIG9uIHRoZSB4LWF4aXMsIGFuZCBhbm90aGVyIHNjYWxlIG9uIHRoZSB5LWF4aXMuIFRoZSB2YWx1ZSAoYW5kIGNvbG9yKSBhdCB0aGF0IHBvaW50IGluIHRoZSBncmlkIHNob3dzIHlvdSB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGVzZSB0d28gc3Vic2NhbGUgbWVhbnMgYWNyb3NzIHRoZSA1IHNpdGVzLiBUaGUgbWF4aW11bSBwb3NzaWJsZSBjb3JyZWxhdGlvbiBpcyArMSAocmVkKSwgYW5kIHRoZSBtaW5pbXVtIGlzIC0xIChibHVlKS4KCkkgb3JkZXJlZCB0aGUgc2NhbGVzIGFjY29yZGluZyB0byB0aGUgY2x1c3RlciBhbmFseXNpcyB3ZSBqdXN0IGRpZCBhYm92ZSwgc28geW91IGNhbiBzZWUgInBhdGNoZXMiIG9mIHNjYWxlcyB0aGF0IGFsbCB0ZW5kZWQgdG8gaGF2ZSBzaW1pbGFyIHBhdHRlcm5zIG9mIG1lYW5zIGFjcm9zcyBzaXRlcy4KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMX0KZF9sb25nX3N1YnNjYWxlX2Jvb3QgJT4lCiAgZmlsdGVyKCFncmVwbCgidGhhaSIsIHN1YnNjYWxlKSkgJT4lIAogIG11dGF0ZShzdWJzY2FsZSA9IGlmZWxzZShzdWJzY2FsZSA9PSAiaW5uZXIgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUoYXMuY2hhcmFjdGVyKHN1YnNjYWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N1YigicGFja2V0ICIsICJwIiwgcGFja2V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIl8iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHN1YnNjYWxlKSkpICU+JQogIGRpc3RpbmN0KGN0cnksIHN1YnNjYWxlLCBNZWFuKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1YnNjYWxlLCBNZWFuKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjdHJ5IikgJT4lCiAgY29yKHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSAlPiUKICAjIGNvcnJwbG90IHZlcnNpb246CiAgIyBjb3JycGxvdDo6Y29ycnBsb3QobWV0aG9kID0gImNvbG9yIiwgdGwuY29sID0gImJsYWNrIiwKICAjICAgICAgICAgICAgICAgICAgICBhZGRDb2VmLmNvbCA9ICJibGFjayIsIG9yZGVyID0gImhjbHVzdCIsCiAgIyAgICAgICAgICAgICAgICAgICAgY29sID0gUkNvbG9yQnJld2VyOjpicmV3ZXIucGFsKG4gPSAxMSwgbmFtZSA9ICJQUkduIiksCiAgIyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiXG5jb3JyZWxhdGlvbnMgYmV0d2VlbiBzdWJzY2FsZSBtZWFucyAoYnkgY291bnRyeSksIG9yZGVyZWQgYnkgaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmciKQoKICAjIGdncGxvdCB2ZXJzaW9uOgogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YnNjYWxlQSIpICU+JQogIG11dGF0ZShzdWJzY2FsZUFfb3JkZXIgPSBhcy5udW1lcmljKGZhY3Rvcihhcy5udW1lcmljKGZhY3RvcihzdWJzY2FsZUEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gY2x1c3Rfc3Vic2NhbGVzJG9yZGVyKSkpICU+JQogIGdhdGhlcihzdWJzY2FsZUIsIGNvciwgLXN1YnNjYWxlQSwgLXN1YnNjYWxlQV9vcmRlcikgJT4lCiAgbXV0YXRlKHN1YnNjYWxlQl9vcmRlciA9IGFzLm51bWVyaWMoZmFjdG9yKGFzLm51bWVyaWMoZmFjdG9yKHN1YnNjYWxlQikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjbHVzdF9zdWJzY2FsZXMkb3JkZXIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihzdWJzY2FsZUEsIGRlc2Moc3Vic2NhbGVBX29yZGVyKSksIAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoc3Vic2NhbGVCLCBzdWJzY2FsZUJfb3JkZXIpLCAKICAgICAgICAgICAgIGZpbGwgPSBjb3IsIGxhYmVsID0gcm91bmQyKGNvcikpKSArCiAgZ2VvbV90aWxlKCkgKwogIGdlb21fdGV4dChzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNTApLAogICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gImNvcnJlbGF0aW9ucyBhbW9uZyBtZWFuIHN1YnNjYWxlIHNjb3JlcywgYnkgc2l0ZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJ1c2luZyBwYWlyd2lzZSBjb21wbGV0ZSBvYnNlcnZhdGlvbnNcbm9yZGVyZWQgdmlhIGhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIGFuYWx5c2lzIiwKICAgICAgIGZpbGwgPSAiY29ycmVsYXRpb25cbmNvZWZmLiAocikiLAogICAgICAgeCA9ICIiLAogICAgICAgeSA9ICIiKQpgYGAKCiMgTG9vayBhdCBjb3JyZWxhdGlvbnMgYW1vbmcgc3Vic2NhbGVzIGJ5IGluZGl2aWR1YWxzCgpXZSBjb3VsZCBkbyB0aGUgc2FtZSB0aGluZyB0aGlua2luZyBhYm91dCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBpbnN0ZWFkIG9mIHNpdGVzIC0gYnV0IGl0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCB0aGF0IG1vc3QgcGVvcGxlIGRpZG4ndCBmaWxsIG91dCBhbGwgYHIgbGVuZ3RoKGxldmVscyhmYWN0b3IoZF9sb25nX3N1YnNjYWxlJHN1YnNjYWxlKSkpIC0gMWAgc3Vic2NhbGVzISBTbyB3ZSdsbCBmb2N1cyBvbiBqdXN0IGxvb2tpbmcgYXQgaG93IHRoZSBzdWJzY2FsZXMgd2l0aGluIGVhY2ggcGFja2V0IChQYWNrZXQgMSwgMiwgb3IgMykgImhhbmcgdG9nZXRoZXIiIGZvciB0aGUgcGVvcGxlIHdobyBjb21wbGV0ZWQgdGhhdCBwYWNrZXQuCgpBcyBhYm92ZSwgdG8gcmVhZCB0aGVzZSBwbG90cywgZmluZCBvbmUgc2NhbGUgb24gdGhlIHgtYXhpcywgYW5kIGFub3RoZXIgc2NhbGUgb24gdGhlIHktYXhpcy4gVGhlIHZhbHVlIChhbmQgY29sb3IpIGF0IHRoYXQgcG9pbnQgaW4gdGhlIGdyaWQgc2hvd3MgeW91IHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBzdWJzY2FsZSBtZWFucyBhY3Jvc3MgdGhlIDUgc2l0ZXMuIFRoZSBtYXhpbXVtIHBvc3NpYmxlIGNvcnJlbGF0aW9uIGlzICsxIChyZWQpLCBhbmQgdGhlIG1pbmltdW0gaXMgLTEgKGJsdWUpLiAoTm90ZSB0aGF0IHRoZXNlIHNjYWxlcyBhcmUgYmVpbmcgcHJlc2VudGVkIGluIGFscGhhYmV0aWNhbCBvcmRlciwgKm5vdCogYnkgYW55IHNvcnQgb2YgY2x1c3RlcmluZyBhbmFseXNpcy4pCgojIyBQYWNrZXQgMQoKYGBge3IgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CmRfbG9uZ19zdWJzY2FsZSAlPiUKICBmaWx0ZXIocGFja2V0ID09IDEsICFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICBzcHJlYWQoc3Vic2NhbGUsIHN1bV9zY29yZSkgJT4lCiAgc2VsZWN0KC1jKGN0cnksIHdoZXIsIHJlY3IsIHdob2MsIGF0dG4pKSAlPiUKICBtdXRhdGUoc3ViaiA9IHBhc3RlKHN1YmosIHBhY2tldCwgdmVyc2lvbiwgc2VwID0gIl8iKSkgJT4lCiAgc2VsZWN0KC1wYWNrZXQsIC12ZXJzaW9uKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHJlbW92ZV9yb3duYW1lcygpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikgJT4lCiAgIyBjb3JycGxvdCB2ZXJzaW9uOgogICMgY29ycnBsb3Q6OmNvcnJwbG90KG1ldGhvZCA9ICJjb2xvciIsIHRsLmNvbCA9ICJibGFjayIsCiAgIyAgICAgICAgICAgICAgICAgICAgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCBvcmRlciA9ICJoY2x1c3QiLAogICMgICAgICAgICAgICAgICAgICAgIGNvbCA9IFJDb2xvckJyZXdlcjo6YnJld2VyLnBhbChuID0gMTEsIG5hbWUgPSAiUFJHbiIpLAogICMgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlxuUEFDS0VUIDE6IGNvcnJlbGF0aW9ucyBhbW9uZyBzdWJzY2FsZXMiKQoKICAjIGdncGxvdCB2ZXJzaW9uOgogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YnNjYWxlQSIpICU+JQogIGdhdGhlcihzdWJzY2FsZUIsIGNvciwgLXN1YnNjYWxlQSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc3Vic2NhbGVBLCB5ID0gc3Vic2NhbGVCLCBmaWxsID0gY29yLCBsYWJlbCA9IHJvdW5kMihjb3IpKSkgKwogIGdlb21fdGlsZSgpICsKICBnZW9tX3RleHQoc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDYpLAogICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlBBQ0tFVCAxOiBjb3JyZWxhdGlvbnMgYW1vbmcgc3Vic2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gInVzaW5nIHBhaXJ3aXNlIGNvbXBsZXRlIG9ic2VydmF0aW9ucyIsCiAgICAgICB4ID0gIiIsCiAgICAgICB5ID0gIiIpCmBgYAoKIyMgUGFja2V0IDIKCmBgYHtyIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpkX2xvbmdfc3Vic2NhbGUgJT4lCiAgZmlsdGVyKHBhY2tldCA9PSAyLCAhaXMubmEoc3VtX3Njb3JlKSkgJT4lCiAgc3ByZWFkKHN1YnNjYWxlLCBzdW1fc2NvcmUpICU+JQogIHNlbGVjdCgtYyhjdHJ5LCB3aGVyLCByZWNyLCB3aG9jLCBhdHRuKSkgJT4lCiAgbXV0YXRlKHN1YmogPSBwYXN0ZShzdWJqLCBwYWNrZXQsIHZlcnNpb24sIHNlcCA9ICJfIikpICU+JQogIHNlbGVjdCgtcGFja2V0LCAtdmVyc2lvbikgJT4lCiAgZGlzdGluY3QoKSAlPiUKICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmoiKSAlPiUKICBjb3IodXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpICU+JQogICMgY29ycnBsb3QgdmVyc2lvbjoKICAjIGNvcnJwbG90Ojpjb3JycGxvdChtZXRob2QgPSAiY29sb3IiLCB0bC5jb2wgPSAiYmxhY2siLAogICMgICAgICAgICAgICAgICAgICAgIGFkZENvZWYuY29sID0gImJsYWNrIiwgb3JkZXIgPSAiaGNsdXN0IiwKICAjICAgICAgICAgICAgICAgICAgICBjb2wgPSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobiA9IDExLCBuYW1lID0gIlBSR24iKSwKICAjICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJcblBBQ0tFVCAyOiBjb3JyZWxhdGlvbnMgYW1vbmcgc3Vic2NhbGVzIikKCiAgIyBnZ3Bsb3QgdmVyc2lvbjoKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJzY2FsZUEiKSAlPiUKICBnYXRoZXIoc3Vic2NhbGVCLCBjb3IsIC1zdWJzY2FsZUEpICU+JQogIGdncGxvdChhZXMoeCA9IHN1YnNjYWxlQSwgeSA9IHN1YnNjYWxlQiwgZmlsbCA9IGNvciwgbGFiZWwgPSByb3VuZDIoY29yKSkpICsKICBnZW9tX3RpbGUoKSArCiAgZ2VvbV90ZXh0KHNpemUgPSAzKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIoZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSA2KSwKICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJQQUNLRVQgMjogY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJ1c2luZyBwYWlyd2lzZSBjb21wbGV0ZSBvYnNlcnZhdGlvbnMiLAogICAgICAgeCA9ICIiLAogICAgICAgeSA9ICIiKQpgYGAKCiMjIFBhY2tldCAzCgpgYGB7ciBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZF9sb25nX3N1YnNjYWxlICU+JQogIGZpbHRlcihwYWNrZXQgPT0gMywgIWlzLm5hKHN1bV9zY29yZSkpICU+JQogIHNwcmVhZChzdWJzY2FsZSwgc3VtX3Njb3JlKSAlPiUKICBzZWxlY3QoLWMoY3RyeSwgd2hlciwgcmVjciwgd2hvYywgYXR0bikpICU+JQogIG11dGF0ZShzdWJqID0gcGFzdGUoc3ViaiwgcGFja2V0LCB2ZXJzaW9uLCBzZXAgPSAiXyIpKSAlPiUKICBzZWxlY3QoLXBhY2tldCwgLXZlcnNpb24pICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJqIikgJT4lCiAgY29yKHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSAlPiUKICAjIGNvcnJwbG90IHZlcnNpb246CiAgIyBjb3JycGxvdDo6Y29ycnBsb3QobWV0aG9kID0gImNvbG9yIiwgdGwuY29sID0gImJsYWNrIiwKICAjICAgICAgICAgICAgICAgICAgICBhZGRDb2VmLmNvbCA9ICJibGFjayIsIG9yZGVyID0gImhjbHVzdCIsCiAgIyAgICAgICAgICAgICAgICAgICAgY29sID0gUkNvbG9yQnJld2VyOjpicmV3ZXIucGFsKG4gPSAxMSwgbmFtZSA9ICJQUkduIiksCiAgIyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiXG5QQUNLRVQgMzogY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyIpCgogICMgZ2dwbG90IHZlcnNpb246CiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vic2NhbGVBIikgJT4lCiAgZ2F0aGVyKHN1YnNjYWxlQiwgY29yLCAtc3Vic2NhbGVBKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzdWJzY2FsZUEsIHkgPSBzdWJzY2FsZUIsIGZpbGwgPSBjb3IsIGxhYmVsID0gcm91bmQyKGNvcikpKSArCiAgZ2VvbV90aWxlKCkgKwogIGdlb21fdGV4dChzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNiksCiAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiUEFDS0VUIDM6IGNvcnJlbGF0aW9ucyBhbW9uZyBzdWJzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAidXNpbmcgcGFpcndpc2UgY29tcGxldGUgb2JzZXJ2YXRpb25zIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiIikKYGBgCgojIyBBbGwgcGFja2V0cwoKSnVzdCBmb3IgZnVuLCBoZXJlJ3MgYSBsb29rIGF0IHRoZSBjb3JyZWxhdGlvbnMgYW1vbmcgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMnIHN1YnNjYWxlIHNjb3JlcyBhY3Jvc3MgYWxsIHNjYWxlcy4gKipOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBwYWlycyBvZiBzdWJzY2FsZXMgcHJvYmFibHkgaGF2ZSB2ZXJ5IGZldyBvYnNlcnZhdGlvbnMgZ29pbmcgaW50byB0aGVzZSBjb3JyZWxhdGlvbnMhISBTbyB0YWtlIHRoaXMgd2l0aCBhIGdyYWluIG9mIHNhbHQuKioKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMX0KZF9sb25nX3N1YnNjYWxlICU+JQogIHNwcmVhZChzdWJzY2FsZSwgc3VtX3Njb3JlKSAlPiUKICBzZWxlY3QoLWMoY3RyeSwgd2hlciwgcmVjciwgd2hvYywgYXR0bikpICU+JQogIG11dGF0ZShzdWJqID0gcGFzdGUoc3ViaiwgcGFja2V0LCB2ZXJzaW9uLCBzZXAgPSAiXyIpKSAlPiUKICBzZWxlY3QoLXBhY2tldCwgLXZlcnNpb24pICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJqIikgJT4lCiAgY29yKHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJzY2FsZUEiKSAlPiUKICBnYXRoZXIoc3Vic2NhbGVCLCBjb3IsIC1zdWJzY2FsZUEpICU+JQogIGdncGxvdChhZXMoeCA9IHN1YnNjYWxlQSwgeSA9IHN1YnNjYWxlQiwgZmlsbCA9IGNvciwgbGFiZWwgPSByb3VuZDIoY29yKSkpICsKICBnZW9tX3RpbGUoKSArCiAgZ2VvbV90ZXh0KHNpemUgPSAzKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIoZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSA2KSwKICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJQQUNLRVRTIDEtMzogY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJ1c2luZyBwYWlyd2lzZSBjb21wbGV0ZSBvYnNlcnZhdGlvbnMiLAogICAgICAgeCA9ICIiLAogICAgICAgeSA9ICIiKQpgYGAK